/*********************************************************************************************************
 *
 *	模块名称 :ln相关命令执行模块
 *	文件名称 :Ln_Command.c
 *	版    本 : V1.0
 *	说    明 :本模块在用户输入ln指令后开始执行，包括ln与ln -s。
 *
 *              注意事项：
 *                务必将编辑器的缩进参数和TAB设置为4来阅读本文件，以使得代码显示整齐。
 *
 *	修改记录 :
 *		版本号       日期         作者        说明
 *		V1.0     2022-05-09     zrx
 *
 *	Copyright (C), 2022-2030, xxxx
 *
 *********************************************************************************************************/

#include "../include/Ln_Command.h"

/*********************************************************************************************************
 *	函 数 名:Ln_Command
 *	功能说明:执行ln相关命令。
 *	形    参:string pointer array User content
 *  全局变量:无
 *	返 回 值:success 0    false -1
 *********************************************************************************************************/

int Ln_Command(char *abuf[20])
{
    if (abuf[1] && abuf[2])
    {
        int iss;
        int i;
        for (i = 1; i < 20 && abuf[i]; i++)
        {
            iss = strcmp(abuf[i], "-s");
            if (!iss)
            {
                break;
            }
        }
        if (iss)
        {
            int lk = link(abuf[1], abuf[2]);
            if (lk == -1)
            {
                perror("creat fail");
                return -1;
            }
            return 0;
        }
        else
        {
            char *buf[2] = {"\0"}; //找出内容中的源文件与目标文件
            int j = 0;
            for (i = 1; i < 4; ++i)
            {
                if (!strcmp(abuf[i], "-s"))
                {
                    continue;
                }
                buf[j] = abuf[i];
                ++j;
            }

            int sln = symlink(buf[0], buf[1]);
            if (sln == -1)
            {
                perror("link fail");
                return -1;
            }
            return 0;
        }
    }
    else
    {
        puts("Invalid format");
        return -1;
    }
}
